#include <iostream>
#include <thread>
#include <future>
#include <memory>

//packaged_task是一个模板类，对一个函数进行二次封装，可以通过get_future来获取一个future对象，来获取这个函数异步的结果
int Add(int num1,int num2)
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    
    return num1+num2;
}

int main()
{
    auto ptask=std::make_shared<std::packaged_task<int(int,int)>>(Add);
    std::future<int> fu=ptask->get_future();
    std::thread thr([ptask]()
    {
        (*ptask)(11,22);
    });
    //std::async(std::launch::async,task,11,22);
    //task(11,22);
    int sum=fu.get();
    std::cout<<sum<<std::endl;
    thr.join();
    return 0;
}